//package com.jdk.code.annotation;
//
//
//import java.lang.annotation.Annotation;
//import java.lang.annotation.Retention;
//import java.lang.annotation.RetentionPolicy;
//import java.lang.reflect.Method;
//import java.util.Map;
//import java.util.concurrent.ConcurrentHashMap;
//import java.util.concurrent.CountDownLatch;
//import java.util.concurrent.ExecutorService;
//import java.util.concurrent.Executors;
//
///**
// * Annotation在反射函数中的使用示例
// *
// * @author skywang
// * @email kuiwu-wang@163.com
// */
//@Retention(RetentionPolicy.RUNTIME)
//@interface MyAnnotation {
//    String[] value() default "unknown";
//}
//
///**
// * Person类。它会使用MyAnnotation注解。
// */
//class Person {
//
//    /**
//     * empty()方法同时被 "@Deprecated" 和 “@MyAnnotation(value={"a","b"})”所标注
//     * (01) @Deprecated，意味着empty()方法，不再被建议使用
//     * (02) @MyAnnotation, 意味着empty() 方法对应的MyAnnotation的value值是默认值"unknown"
//     */
//    @MyAnnotation
//    @Deprecated
//    public void empty(){
//        System.out.println("\nempty");
//    }
//
//    /**
//     * sombody() 被 @MyAnnotation(value={"girl","boy"}) 所标注，
//     * @MyAnnotation(value={"girl","boy"}), 意味着MyAnnotation的value值是{"girl","boy"}
//     */
//    @MyAnnotation(value={"girl","boy"})
//    public void somebody(String name, int age){
//        System.out.println("\nsomebody: "+name+", "+age);
//    }
//}
//
//public class AnnotationTest {
//
//
//    public static void main(String[] args) {
//        test1();
//        test2();
//    }
//
//    public static void test2()  {
//        long currentTimeMillis = System.currentTimeMillis();
//
//        final CountDownLatch countDownLatch = new CountDownLatch(5);
//
//        final Map map = new ConcurrentHashMap();
//
//        final ExecutorService executorService = Executors.newFixedThreadPool(5);
//
//
//            executorService.execute(new Runnable() {
//                @Override
//                public void run() {
//                    try {
//                        for (int t = 1; t< 1000000; t++){
//                            map.put(t+"1",t);
//                        }
//                        countDownLatch.countDown();
//                    }catch (Exception e){
//
//                    }finally {
//                        executorService.shutdown();
//                    }
//                }
//            });
//
//            executorService.execute(new Runnable() {
//                @Override
//                public void run() {
//                    try {
//                        for (int t = 1000000; t< 2000000; t++){
//                            map.put(t+"2",t);
//                        }
//                        countDownLatch.countDown();
//                    }catch (Exception e){
//
//                    }finally {
//                        executorService.shutdown();
//                    }
//                }
//            });
//
//            executorService.execute(new Runnable() {
//                @Override
//                public void run() {
//                    try {
//                        for (int t = 2000000; t< 3000000; t++){
//                            map.put(t+"3",t);
//                        }
//                        countDownLatch.countDown();
//                    }catch (Exception e){
//
//                    }finally {
//                        executorService.shutdown();
//                    }
//                }
//            });
//
//            executorService.execute(new Runnable() {
//                @Override
//                public void run() {
//                    try {
//                        for (int t = 3000000; t< 4000000; t++){
//                            map.put(t+"4",t);
//                        }
//                        countDownLatch.countDown();
//                    }catch (Exception e){
//
//                    }finally {
//                        executorService.shutdown();
//                    }
//                }
//            });
//
//            executorService.execute(new Runnable() {
//                @Override
//                public void run() {
//                    try {
//                        for (int t = 4000000; t< 5000000; t++){
//                            map.put(t+"5",t);
//                        }
//                        countDownLatch.countDown();
//                    }catch (Exception e){
//
//                    }finally {
//                        executorService.shutdown();
//                    }
//                }
//            });
//
//        try {
//            countDownLatch.await();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//
////        System.out.println(JSON.toJSONString(map));
//        System.out.println(System.currentTimeMillis()-currentTimeMillis);
//
//    }
//
//    private static void test1() {
//        long currentTimeMillis = System.currentTimeMillis();
//
//        final Map map = new ConcurrentHashMap();
//
//
//        for (int t =1; t< 5 *1000000; t++){
//        map.put(t,t);
//        }
//
////        System.out.println(JSON.toJSONString(map));
//        System.out.println(System.currentTimeMillis()-currentTimeMillis);
//
//    }
//
//    public static void iteratorAnnotations(Method method) {
//
//        // 判断 somebody() 方法是否包含MyAnnotation注解
//        if(method.isAnnotationPresent(MyAnnotation.class)){
//            // 获取该方法的MyAnnotation注解实例
//            MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
//            // 获取 myAnnotation的值，并打印出来
//            String[] values = myAnnotation.value();
//            for (String str:values){
//                System.out.printf(str+", ");
//                System.out.println();
//            }
//
//        }
//
//        // 获取方法上的所有注解，并打印出来
//        Annotation[] annotations = method.getAnnotations();
//        for(Annotation annotation : annotations){
//            System.out.println(annotation);
//        }
//    }
//}